﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using BE;

namespace DAL
{
    public class LocalidadDAL : BaseDAL 
    {

        public List<LocalidadBE> SeleccionarPorParametros(LocalidadBE pLocalidadBE, int? pPageSize, int? pPageNum, ref int pCountReg)
        {
            List<LocalidadBE> listaDeLocalidadBE = null;
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnn;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@IdLocalidad", pLocalidadBE.IdLocalidad ));
                cmd.Parameters.Add(new SqlParameter("@Descripcion", pLocalidadBE.Descripcion));
                cmd.Parameters.Add(new SqlParameter("@IdProvincia", pLocalidadBE.pProvinciaBE.IdProvincia  ));

                cmd.Parameters.Add(new SqlParameter("@pagesize", pPageSize));
                cmd.Parameters.Add(new SqlParameter("@pagenum", pPageNum));

                SqlParameter p = new SqlParameter();
                p.ParameterName = "@PageCount";
                p.Direction = ParameterDirection.Output;
                p.SqlDbType = SqlDbType.Int;
                cmd.Parameters.Add(p);

                cmd.CommandText = "Localidades_GetAllPaginated";
                cnn.Open();
                SqlDataReader reader = null;
                reader = cmd.ExecuteReader();

                //pCountReg = Int32.Parse(cmd.Parameters["PageCount"].Value.ToString());
                                    
                if (reader.HasRows)
                {
                    Int32 idLocalidadIndex = reader.GetOrdinal("IdLocalidad");
                    Int32 descripcionIndex = reader.GetOrdinal("Descripcion");
                    Int32 idProvinciaIndex = reader.GetOrdinal("IdProvincia");
                    Int32 provinciaIndex = reader.GetOrdinal("Provincia");
                    
                    listaDeLocalidadBE  = new List<LocalidadBE>();

                    while (reader.Read())
                    {
                        LocalidadBE oLocalidadBE = new LocalidadBE();
                        ProvinciaBE oProvinciaBE = new ProvinciaBE(); 

                        Object[] values = new Object[reader.FieldCount];
                        reader.GetValues(values);

                       oLocalidadBE.IdLocalidad = Convert.ToInt32(values[idLocalidadIndex]);
                       oLocalidadBE.Descripcion = Convert.ToString(values[descripcionIndex]);

                       oProvinciaBE.IdProvincia = Convert.ToInt32(values[idProvinciaIndex]);
                       oProvinciaBE.Descripcion = Convert.ToString(values[provinciaIndex]);


                      

                       oLocalidadBE.pProvinciaBE = oProvinciaBE; 

                       listaDeLocalidadBE.Add(oLocalidadBE);
                    }
                }
                reader.Close();
                pCountReg = (Int32)cmd.Parameters["@PageCount"].Value;

            }
            return listaDeLocalidadBE;
        }

        public LocalidadBE SeleccionarPorId(LocalidadBE oLocalidadBE)
        {
            LocalidadBE oLocalidad = null;
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnn;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@IdLocalidad", oLocalidadBE.IdLocalidad));
                cmd.CommandText = "Localidads_GetById";
                cnn.Open();
                SqlDataReader reader = null;
                reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    Int32 idLocalidadIndex = reader.GetOrdinal("IdLocalidad");
                    Int32 descripcionIndex = reader.GetOrdinal("Descripcion");
                    Int32 idProvinciaIndex = reader.GetOrdinal("IdProvincia");

                    while (reader.Read())
                    {
                        oLocalidad = new LocalidadBE();

                        Object[] values = new Object[reader.FieldCount];
                        reader.GetValues(values);

                        oLocalidad.IdLocalidad = Convert.ToInt32(values[idLocalidadIndex]);
                        oLocalidad.Descripcion = Convert.ToString(values[descripcionIndex]);
                        oLocalidad.IdProvincia = Convert.ToInt32(values[idProvinciaIndex]);
                    }
                }

            }
            return oLocalidad;
        }

        public void InsertarLocalidad(LocalidadBE Localidad)
        {
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                try
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = cnn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "Localidads_i";
                    cmd.Parameters.Add(new SqlParameter("@Descripcion", Localidad.Descripcion));
                    cmd.Parameters.Add(new SqlParameter("@IdProvincia", Localidad.pProvinciaBE.IdProvincia));

                    SqlParameter p = new SqlParameter();
                    p.ParameterName = "@IdLocalidad";
                    p.Direction = ParameterDirection.Output;
                    p.SqlDbType = SqlDbType.Int;
                    cmd.Parameters.Add(p);

                    cnn.Open();
                    cmd.ExecuteNonQuery();
                    Localidad.IdLocalidad = (Int32)cmd.Parameters["@IdLocalidad"].Value;
                }
                catch (Exception)
                {
                    throw;
                }

            }
        }

        public void ModificarLocalidad(LocalidadBE pLocalidad)
        {
            try
            {
                using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = cnn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "Localidads_u";
                    cmd.Parameters.Add(new SqlParameter("@IdLocalidad", pLocalidad.IdLocalidad));
                    cmd.Parameters.Add(new SqlParameter("@Descripcion", pLocalidad.Descripcion));
                    cmd.Parameters.Add(new SqlParameter("@IdProvincia", pLocalidad.pProvinciaBE.IdProvincia));

                    cnn.Open();
                    cmd.ExecuteNonQuery();
                }
            }
            catch (Exception)
            { throw; }
        }

        public void DeleteLocalidad(LocalidadBE pLocalidad)
        {
            try
            {
                using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = cnn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "Localidads_d";
                    cmd.Parameters.Add(new SqlParameter("@IdLocalidad", pLocalidad.IdLocalidad));
                    cnn.Open();
                    cmd.ExecuteNonQuery();
                }
            }
            catch (Exception)
            { throw; }
        }
    }
}
